package com.atguigu.lease.web.admin.controller.apartment;



import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.PaymentType;
import com.atguigu.lease.web.admin.service.PaymentTypeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@Tag(name = "支付方式管理")
@RequestMapping("/admin/payment")
@RestController
public class PaymentTypeController {
    @Autowired
    private PaymentTypeService service;
    /**
     * 实现思路：
     *   单表操作
     *   查询单表的所有数据，没有分页
     * 实现过程：
     *   mybatis-plus的service扩展方法查询全部支付方式集合
     *   service.list()
     *   list --> result.ok(list)
     *  实现问题：
     *     1. 多了三个字段 createTime updateTime isDeleted
     *         返回的JSON拥有哪些数据，由我们的实体类决定
     *            User (id name age) -> 默认的行为（jackson） ->{id,name,age}
     *         springmvc接收前端和响应前端的json数据都是由 handlerAdapter使用jackson工具完成转化！
     *         我们的目标： 让实体类不是所有都生效json数据 User (id name age) -> 修改的行为（jackson） ->{id,name}
     *         jackson: @JsonIgnore -> 属性上， 属性就不会转化成json key
     *     2. 逻辑删除没有真正生效 【BaseEntity -> isDeleted -> @TableLogic】
     *        （表中添加一个数字字段 0 未删除 1已删除  || 使用注解@TableLogic获取全局配置逻辑删除生效！）
     */

    @Operation(summary = "查询全部支付方式列表")
    @GetMapping("list")
    public Result<List<PaymentType>> listPaymentType() {
        List<PaymentType> list = service.list();
        return Result.ok(list);
    }
    /**
     * 实现思路：
     *   单表的数据保存和更新
     *   有id更新
     *   没有id保存
     *   mybatis-plus / service /saveOrUpdate -> 对象
     *   返回成功即可
     * 实现步骤：
     *   1. 导入paymentTypeService对象
     *   2. 调用saveOrUpdate(对象)
     *   3. 判定成功还是失败，返回对应result
     * 实现问题：
     *   1. 逻辑删除字段没有默认值 0 ， 导致修改的时候不修改，进行添加！
     *      1.1 BaseEntity isDeleted = 0 不推荐
     *      1.2 数据库可以设置默认值
     *       //修改表的列
     *       alter table 表名 add 列名 类型;
     *       alter table 表名 drop 列名;
     *       alter table 表名 change 原表名 新表名;
     *       alter table payment_type modify is_deleted int default 0 ;
     *   2. 创建时间和修改时间没有赋值
     *        @JsonIgnore 我们不给前端返回！ 就算前端给我们，我们也无法接收！！！
     *        createTime
     *        updateTime
     *        2.1 手动解决，handler方法中进行判断！ 保存 添加createTime 更新 更新updateTime
     *        2.2 有人（框架和技术）在存储数据的时候，帮我自动填充时间
     *            springboot  springmvc spring  jackson  kenfi4j lombok
     *            mybatis mybatis-plus(自动填充) https://www.baomidou.com/guides/auto-fill-field/
     *            步骤1： 实体类的属性添加@TableFiled( , fill = INSERT | UPDATE)
     *            步骤2： 定义数据设置的组件（common admin要 app也要）
     *                   com.atguigu.lease.common.mybatisplus.MybatisMetaObjectHandler implements MetaObjectHandler
     *                   https://www.baomidou.com/guides/auto-fill-field/
     */

    @Operation(summary = "保存或更新支付方式")
    @PostMapping("saveOrUpdate")
    public Result saveOrUpdatePaymentType(@RequestBody PaymentType paymentType) {
        //        if (paymentType.getId() != null){
//            //更新 java.util
//            paymentType.setUpdateTime(new Date());
//        }else{
//            //保存
//            paymentType.setCreateTime(new Date());
//        }
        boolean b = service.saveOrUpdate(paymentType);
        return b?Result.ok():Result.fail();
    }

    @Operation(summary = "根据ID删除支付方式")
    @DeleteMapping("deleteById")
    public Result deletePaymentById(@RequestParam Long id) {
        service.removeById(id);
        return Result.ok();
    }

}















